feat(agents): adopt customize.toml pattern and agent roster#29
feat(agents): adopt customize.toml pattern and agent roster#29
Conversation
Mirrors bmm's remove-skill-manifests end-state:
- Per-agent customize.toml encodes persona, menu, and activation hooks
(canonical [agent] block: role, identity, communication_style,
principles, persistent_facts, prepend/append steps, [[agent.menu]]).
- SKILL.md activation rewritten to resolve the agent block via
{project-root}/_bmad/scripts/resolve_customization.py, load
persistent_facts, greet with icon, and dispatch the menu.
- Agent roster added to module.yaml with team field so external skills
(party-mode, retrospective, help catalog) can route, display, and
embody agents without reaching into each skill folder.
- bmad-skill-manifest.yaml removed — superseded by customize.toml
metadata and the module.yaml roster.
Persona wording polished across the six agents (role/identity/
communication_style/principles) following the bmm convention.
|
Warning Rate limit exceeded
Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 26 minutes and 32 seconds. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (20)
WalkthroughThe PR establishes a centralized agent registry in Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
🤖 Augment PR SummarySummary: Aligns CIS agents with the BMAD “customize.toml + resolver” customization model and introduces a module-level agent roster for external routing. Changes:
Technical Notes: The new activation flow expects 🤖 Was this summary useful? React with 👍 or 👎 |
|
|
||
| ### Step 4: Load Persistent Facts | ||
|
|
||
| Treat every entry in `{agent.persistent_facts}` as foundational context you carry for the rest of the session. Entries prefixed `file:` are paths or globs under `{project-root}` — load the referenced contents as facts. All other entries are facts verbatim. |
There was a problem hiding this comment.
Step 4 instructs loading file: persistent facts but doesn’t say what to do when a referenced file/glob is missing (e.g., fresh installs without project-context.md or Sophia’s sidecar files), which could derail activation. Consider explicitly stating that missing matches should be skipped without error.
Severity: medium
Other Locations
src/skills/bmad-cis-agent-brainstorming-coach/SKILL.md:45src/skills/bmad-cis-agent-creative-problem-solver/SKILL.md:45src/skills/bmad-cis-agent-design-thinking-coach/SKILL.md:45src/skills/bmad-cis-agent-innovation-strategist/SKILL.md:45src/skills/bmad-cis-agent-presentation-master/SKILL.md:45
🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.
| @@ -1 +0,0 @@ | |||
| type: skill | |||
There was a problem hiding this comment.
This removes the only remaining bmad-skill-manifest.yaml marker from workflow skill directories; if any installer/catalog still uses these manifests for discovery, these skills may become invisible. Consider double-checking the new discovery path covers non-agent workflow skills too (since they don’t have customize.toml or module.yaml agents: entries).
Severity: medium
🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.
| ## Overview | ||
|
|
||
| This skill provides a Master Storyteller who crafts compelling narratives using proven story frameworks and techniques. Act as Sophia — a bard weaving an epic tale, flowery and whimsical, where every sentence enraptures and draws you deeper. | ||
| You are Sophia, the Master Storyteller. You craft compelling narratives using proven story frameworks — turning raw ideas into stories that land, move audiences, and persuade. |
There was a problem hiding this comment.
Docs in docs/reference/configuration.md still describe Sophia’s “Critical actions” as a SKILL.md section; this PR moves that behavior into customize.toml persistent_facts + the new activation flow. Consider updating the docs to match so users know where to configure/override this behavior.
Severity: low
🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/skills/bmad-cis-agent-presentation-master/SKILL.md`:
- Around line 47-52: Clarify whether the values in "Step 5: Load Config" are
injected Core Config or read from a file: update the SKILL.md section that
references `{project-root}/_bmad/cis/config.yaml` and the three placeholders
`{user_name}`, `{communication_language}`, and `{document_output_language}` to
explicitly state one of the two behaviours (e.g., "These values are injected at
runtime from Core Config (module.yaml/workflow) and available as variables" OR
"These values must be read from `{project-root}/_bmad/cis/config.yaml` at
startup and parsed"), and ensure the wording matches the terminology used in
workflow.md and module.yaml and the module context header "Variables from Core
Config inserted" so readers know whether no file IO is required or a file
dependency exists.
In `@src/skills/bmad-cis-agent-storyteller/customize.toml`:
- Around line 38-42: The persistent_facts array in customize.toml currently
hard-references two sidecar files
(file:{project-root}/_bmad/_memory/storyteller-sidecar/story-preferences.md and
file:{project-root}/_bmad/_memory/storyteller-sidecar/stories-told.md) which may
not exist on first activation; update the entries to avoid failing on missing
files by using a glob (e.g.,
file:{project-root}/_bmad/_memory/storyteller-sidecar/*.md) or otherwise make
those files optional (seed them during install and/or document skip-missing
behavior), so change the persistent_facts lines to a safe glob entry or ensure
the installer creates those exact files before activation.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 0dade3eb-b3f7-487a-a3f7-a0b7b78091dc
📒 Files selected for processing (23)
src/module.yamlsrc/skills/bmad-cis-agent-brainstorming-coach/SKILL.mdsrc/skills/bmad-cis-agent-brainstorming-coach/bmad-skill-manifest.yamlsrc/skills/bmad-cis-agent-brainstorming-coach/customize.tomlsrc/skills/bmad-cis-agent-creative-problem-solver/SKILL.mdsrc/skills/bmad-cis-agent-creative-problem-solver/bmad-skill-manifest.yamlsrc/skills/bmad-cis-agent-creative-problem-solver/customize.tomlsrc/skills/bmad-cis-agent-design-thinking-coach/SKILL.mdsrc/skills/bmad-cis-agent-design-thinking-coach/bmad-skill-manifest.yamlsrc/skills/bmad-cis-agent-design-thinking-coach/customize.tomlsrc/skills/bmad-cis-agent-innovation-strategist/SKILL.mdsrc/skills/bmad-cis-agent-innovation-strategist/bmad-skill-manifest.yamlsrc/skills/bmad-cis-agent-innovation-strategist/customize.tomlsrc/skills/bmad-cis-agent-presentation-master/SKILL.mdsrc/skills/bmad-cis-agent-presentation-master/bmad-skill-manifest.yamlsrc/skills/bmad-cis-agent-presentation-master/customize.tomlsrc/skills/bmad-cis-agent-storyteller/SKILL.mdsrc/skills/bmad-cis-agent-storyteller/bmad-skill-manifest.yamlsrc/skills/bmad-cis-agent-storyteller/customize.tomlsrc/skills/bmad-cis-design-thinking/bmad-skill-manifest.yamlsrc/skills/bmad-cis-innovation-strategy/bmad-skill-manifest.yamlsrc/skills/bmad-cis-problem-solving/bmad-skill-manifest.yamlsrc/skills/bmad-cis-storytelling/bmad-skill-manifest.yaml
💤 Files with no reviewable changes (10)
- src/skills/bmad-cis-design-thinking/bmad-skill-manifest.yaml
- src/skills/bmad-cis-storytelling/bmad-skill-manifest.yaml
- src/skills/bmad-cis-agent-innovation-strategist/bmad-skill-manifest.yaml
- src/skills/bmad-cis-innovation-strategy/bmad-skill-manifest.yaml
- src/skills/bmad-cis-agent-brainstorming-coach/bmad-skill-manifest.yaml
- src/skills/bmad-cis-agent-creative-problem-solver/bmad-skill-manifest.yaml
- src/skills/bmad-cis-agent-design-thinking-coach/bmad-skill-manifest.yaml
- src/skills/bmad-cis-agent-presentation-master/bmad-skill-manifest.yaml
- src/skills/bmad-cis-agent-storyteller/bmad-skill-manifest.yaml
- src/skills/bmad-cis-problem-solving/bmad-skill-manifest.yaml
| ### Step 5: Load Config | ||
|
|
||
| Load config from `{project-root}/_bmad/cis/config.yaml` and resolve: | ||
| - Use `{user_name}` for greeting | ||
| - Use `{communication_language}` for all communications | ||
| - Use `{document_output_language}` for output documents |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "References to the hard-coded CIS config path:"
rg -n -C2 '_bmad/cis/config\.yaml' || true
echo
echo "Config-like files present in the repository:"
fd -i 'config\.(ya?ml|toml)$|module\.ya?ml$' || true
echo
echo "Core config variable references:"
rg -n -C2 '\b(user_name|communication_language|document_output_language|output_folder)\b' || trueRepository: bmad-code-org/bmad-module-creative-intelligence-suite
Length of output: 28910
Clarify whether these are injected Core Config values or file-based configuration.
The statement "Load config from {project-root}/_bmad/cis/config.yaml" conflicts with the module context, which lists these as "Variables from Core Config inserted." The distinction matters: if these values are injected at runtime by the framework, the wording should reflect that; if they require reading a file, that dependency should be explicit. The same pattern appears across all seven agent SKILL.md files, so alignment with the workflow.md and module.yaml terminology is important for clarity.
Suggested wording clarification
-Load config from `{project-root}/_bmad/cis/config.yaml` and resolve:
+Use the Core Config values inserted for this module:
- Use `{user_name}` for greeting
- Use `{communication_language}` for all communications
- Use `{document_output_language}` for output documents📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ### Step 5: Load Config | |
| Load config from `{project-root}/_bmad/cis/config.yaml` and resolve: | |
| - Use `{user_name}` for greeting | |
| - Use `{communication_language}` for all communications | |
| - Use `{document_output_language}` for output documents | |
| ### Step 5: Load Config | |
| Use the Core Config values inserted for this module: | |
| - Use `{user_name}` for greeting | |
| - Use `{communication_language}` for all communications | |
| - Use `{document_output_language}` for output documents |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/skills/bmad-cis-agent-presentation-master/SKILL.md` around lines 47 - 52,
Clarify whether the values in "Step 5: Load Config" are injected Core Config or
read from a file: update the SKILL.md section that references
`{project-root}/_bmad/cis/config.yaml` and the three placeholders `{user_name}`,
`{communication_language}`, and `{document_output_language}` to explicitly state
one of the two behaviours (e.g., "These values are injected at runtime from Core
Config (module.yaml/workflow) and available as variables" OR "These values must
be read from `{project-root}/_bmad/cis/config.yaml` at startup and parsed"), and
ensure the wording matches the terminology used in workflow.md and module.yaml
and the module context header "Variables from Core Config inserted" so readers
know whether no file IO is required or a file dependency exists.
…lint
- Step 4 wording: explicitly state that `file:` entries with no glob
matches are skipped silently, and clarify that `{project-root}`
anchoring is conventional rather than loader-applied.
- docs/reference/configuration.md: update Sophia's Sidecar section to
describe the new customize.toml persistent_facts flow instead of the
deprecated "Critical actions" SKILL.md pattern.
- README.md: wrap contact@bmadcode.com in angle brackets to satisfy
markdownlint MD034 (no-bare-urls).
Per bmm's canonical customize.toml comment, persistent_facts is for STATIC context only — org rules, project conventions, domain constants — and is explicitly "distinct from the runtime memory sidecar." Sophia's sidecar (story-preferences.md, stories-told.md) is runtime memory that accumulates across sessions. Moving those load instructions into activation_steps_append (Step 7 of the bmm activation flow) keeps the two patterns separate and restores the explicit sidecar-load behavior that existed under the prior SKILL.md "Critical Actions" section. persistent_facts now carries only project-context.md, matching the bmm agent convention. Docs updated to describe the new layout.
Bmm-style persona optimization — LLMs carry rich priors on named practitioners, so naming them activates those priors and makes agents sharper than generic "X years of experience" framing. Luminary pairings applied to each CIS agent's identity (customize.toml) and essence description (module.yaml): - Sophia (Storyteller): Robert McKee × Joseph Campbell - Maya (Design Thinking): Tim Brown × Don Norman - Carson (Brainstorming): Alex Osborn × Keith Johnstone - Dr. Quinn (Problem Solver): Genrich Altshuller × Donella Meadows - Victor (Innovation Strategist): Clayton Christensen × Kim & Mauborgne - Caravaggio (Presentation): Nancy Duarte × Saul Bass Communication style and principles unchanged — persona priors belong in identity, voice/cadence belongs in communication_style.
Investigation showed the storyteller sidecar pattern is read-only and stranded: - No installer step creates `_bmad/_memory/storyteller-sidecar/` or seeds it from templates. - Installer.js explicitly treats `_memory/` as user-owned state it will never create or modify, and official-modules.js skips any `-sidecar` directory when copying. - bmad-cis-storytelling/workflow.md contains zero write/update/record logic for the sidecar files. - bmm's own remove-skill-manifests branch ships zero sidecar dirs; hasSidecar lives only in historical CHANGELOG entries. Net effect: Sophia's activation would always fall through the "missing — skip silently" branch, and the feature is documented as if it works when nothing populates it. Remove the false trail: - Drop the sidecar activation_steps_append from Sophia's customize.toml. - Delete the stranded seed templates (story-preferences.md, stories-told.md) from the skill directory. - Scrub sidecar/memory mentions from configuration.md, agents.md, getting-started.md, and storytelling.md. Sidecar memory can be revisited as a proper feature later — seed on install, write from the workflow, load at activation.
* feat(workflows): adopt customize.toml pattern for workflow skills Merge redirect-only SKILL.md with workflow.md content into a single SKILL.md per workflow skill, add Conventions + On Activation (resolve customization, prepend/append steps, persistent_facts, config load, greet), and wire workflow.on_complete into the final step(s). Applies to design-thinking, innovation-strategy, problem-solving, and storytelling. Mirrors the customization surface shipped for the agent skills in #29. * fix(workflows): address PR review comments - Disambiguate workflow step references in the Inputs section — "before Step N" now reads "before workflow Step N" since the activation block also numbers its steps 1-6. - Clarify persistent_facts handling when a file: entry's glob matches nothing or the path is missing — silently skip, do not fabricate. - Storytelling: fix literal `communication_language` to the templated `{communication_language}` so runtime language switching actually applies. * docs(changelog): record v0.2.0 — customize.toml pattern rollout
Summary
Mirrors bmm's canonical agent customization end-state (as on the
remove-skill-manifestsbranch of BMAD-METHOD) across the six CIS agents.[agent]block (role, identity, communication_style, principles, persistent_facts, activation hooks,[[agent.menu]]tables). Persona wording polished following the bmm convention — "channels X's Y" identity, simile-based communication style, tightened principles.{project-root}/_bmad/scripts/resolve_customization.py, execute prepend steps, adopt persona, load persistent_facts, load config, greet with{agent.icon}, execute append steps, dispatch-or-present the menu.agents:roster (code / name / title / icon / team / description essence) so external skills like party-mode, retrospective, and the help catalog can route and embody agents without reaching into each skill folder. CIS agents are on thecreativeteam.Dependency
Depends on BMAD-METHOD's
remove-skill-manifestsPR landing: SKILL.md references{project-root}/_bmad/scripts/resolve_customization.py, which is installed by bmm's installer once that PR merges.Test plan
remove-skill-manifestsbranch: each CIS agent activates, resolves its customize.toml, greets with icon, and presents its menu_bmad/custom/bmad-cis-agent-storyteller.tomlwith a partial override and confirm scalar/array merge rules holdagents:roster and shows CIS agents on thecreativeteambmad-skill-manifest.yamlreferences in the codebaseSummary by CodeRabbit
Release Notes
New Features
Refactor